import 'taro-ui/dist/style/index.scss'
import Taro, { Component } from '@tarojs/taro'
import { Provider } from '@tarojs/redux'
import { set as setGlobalData, get as getGlobalData } from './global_data'
import Index from './pages/index'
import configStore from './store'
import utils from './utils/util'
import http from './utils/http'
import './app.scss'

// 如果需要在 h5 环境中开启 React Devtools
// 取消以下注释：
// if (process.env.NODE_ENV !== 'production' && process.env.TARO_ENV === 'h5')  {
//   require('nerv-devtools')
// }

const store = configStore()

class App extends Component {

  constructor(props) {
    super(props);
  }
  componentWillMount() {
    // Taro.loadFontFace({
    //   family: 'HF',
    //   source: 'url("https://www.bkdau.cn/xiaochengxu/qc/font/MF.woff")',
    //   success: console.log,
    //   fail: console.log
    // })
  }
  componentDidMount() {
    Taro.getSystemInfo({ //  获取页面的有关信息
      success: (res) => {
        setGlobalData('model', res.model.indexOf('iPhone X') > -1 ? true : '')
        setGlobalData('navigationBarHeight', res.screenHeight - res.windowHeight)
      }
    })
  }

  componentDidShow() {
    let e = this.$router.params;
    setGlobalData('scene', e.query)
    setGlobalData('scene', e.scene)
    setGlobalData('userInfo', utils.getUserInfo())
    setGlobalData('weChatInfo', utils.getWechatInfo())
    setGlobalData('openId', this.getValueSync('openId'))
  }

  componentDidHide() { }

  componentDidCatchError() { }

  config = {
    pages: [
      'pages/index/index', // 首页

      'pages/message/messageList/index', //消息列表
      'pages/message/messageDetails/index', //消息详情页

      'pages/medicineCabinetManagement/index', // 药箱管理
      'pages/medicalkitDetails/index', // 药箱详情页

      'pages/nearlyEffective/index', // 近效期药品列表
      'pages/nearlyEffective/recyclingSubmit/index', // 回收信息

      'pages/drugAdministration/index', //药品管理
      'pages/useDrug/index', // 使用药品
      'pages/drugDetails/index', //药品详情

      'pages/consumptionRecord/index', // 消耗记录
      'pages/consumptionRecord/recordDetails/index', // 消耗详情

      'pages/inspection/index', //巡检介绍页面
      'pages/scan/index', // 巡检扫描页面
      'pages/signin/index', // 巡检签到（准备签到）
      'pages/inspectionSubmit/index', //提交签到

      'pages/signRecord/index', // 签到记录
      'pages/signinDetails/index', // 签到记录详情页

      'pages/setting/index', // 设置页面
      'pages/setting/aboutUs/index', //关于我们
      'pages/setting/updatePassword/index', // 修改密码
      'pages/setting/messageSetting/index', // 消息设置中心

      'pages/login/index', // 登录页面
    ],
    window: {
      backgroundTextStyle: 'dark',
      navigationBarBackgroundColor: '#fff',
      navigationBarTitleText: '张中医急救',
      navigationBarTextStyle: 'black',
      onReachBottomDistance: 50,
      backgroundColor: '#f5f5f5'
    },
    networkTimeout: {
      request: 20000,
      connectSocket: 20000,
      uploadFile: 60000,
      downloadFile: 60000
    },
    debug: true,
    permission: {
      'scope.userLocation': {
        desc: '你的位置信息将用于小程序位置接口的效果展示'
      }
    }
  }

  wxLogin = (callBack) => { //微信自带登录获取code
    Taro.login({
      success: (res) => {
        if (callBack) {
          if (res.code) {
            callBack(true, res.errMsg, res.code) //成功的回调返回 获取的状态，提示，code
          } else {
            callBack(false, res.errMsg)
          }
        }
      },
      fail: () => {
        if (callBack) {
          callBack(false, "授权失败")
        }
      }
    })
  }
  wxLoginInit = (callBack) => { //自动登录只能获取到sessionKey与openid
    if (this.getValueSync('openId')) {
      this.checkRegister(callBack); // 判断是否注册
      return;
    }
    Taro.login({
      timeout: 10000,
      success: res => {
        console.log(res)
        http.get('getOpenid', { // 获取openid
          code: res.code
        }, false, false, false).then((d) => {
          let data = d.datas;
          setGlobalData('openId', data.openid)
          this.saveSync("sessionKey", data.session_key);
          this.saveSync("openId", data.openid);
          this.checkRegister(callBack); // 判断是否注册
        }).catch(() => {
          if (callBack) {
            this.wxLoginInit(callBack); // 无法获取openid 循环操作
          } else {
            utils.hideLoading();
            utils.showtoast('网络或服务器异常,请稍后重试')
            callBack && callBack(false, "授权失败")
          }
        });
      }, fail: (error) => {
        console.log(error)
        utils.hideLoading();
        utils.showtoast('网络或服务器异常,请稍后重试')
        callBack && callBack(false, "授权失败")
      }
    })
  }
  save = (key, value) => { //保存信息到Storage 传入key ，value
    Taro.setStorage({
      key: key,
      data: value,
    })
  }
  saveSync = (key, value) => {
    Taro.setStorageSync(key, value);
  }
  getValueSync = (key) => {
    return Taro.getStorageSync(key);
  }
  scan = (callBack) => {
    Taro.scanCode({
      onlyFromCamera: false
    }).then((res) => {
      if (res.result && res.result.indexOf('QC') > -1) {
        Taro.navigateTo({
          url: '/pages/signin/index?MedicalkitId=' + res.result,
          success: () => {
            callBack && callBack()
          }
        })
      } else {
        callBack && callBack();
        utils.showtoast('扫码失败,二维码不符合规范');
      }
    }, () => {
      callBack && callBack()
    })
  }
  previewImage = (urls = [], current = '') => {
    if (urls instanceof Array && urls.length) {
      Taro.previewImage({
        urls,
        current
      })
    }
  }
  checkRegister = (callBack) => { // 判断用户是否注册；
    http.get('IsLogin', {
      openid: getGlobalData('openId')
    }, false, false, false).then((res) => {
      setGlobalData('userInfo', res.datas)
      setGlobalData('loginid', res.datas.loginid)
      this.saveSync('loginid', res.datas.loginid);
      this.saveSync("userInfo", JSON.stringify(res.datas));
      if (callBack) {
        callBack(true, "已自动登录", res.datas);
      }
    }).catch((e) => {
      Taro.removeStorageSync('lastwardId')
      Taro.navigateTo({ //未注册，跳转到获取用户信息注册页
        url: '/pages/login/index',
      })
    });
  }
  // 在 App 类中的 render() 函数没有实际作用
  // 请勿修改此函数
  render() {
    return (
      <Provider store={store}>
        <Index />
      </Provider>
    )
  }
}

Taro.render(<App />, document.getElementById('app'))
